package todo.service;

import todo.entity.TodoItem;
import todo.exception.TodoException;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class TodoService {

    // 创建线程安全的Map，模拟Todo信息的存储
    private Map<Long, TodoItem> todos =
            Collections.synchronizedMap(new HashMap<Long, TodoItem>());

    public TodoItem addTodo(TodoItem todo) throws TodoException {
        if(todo.getId() < 0) {
            throw new TodoException(TodoException.INPUT_ERROR,"ID cannot be negtive");
        }
        todos.put(todo.getId(), todo);
        return todo;
    }

    public TodoItem getTodo(long id) {
        return todos.get(id);
    }

    public List<TodoItem> findTodos(String name, Boolean complete) {
        List<TodoItem> result=new ArrayList<>();
        for (TodoItem todo: todos.values()){
            if (name!=null && !todo.getName().contains(name)) {
                continue;
            }
            if (complete!=null && !complete.equals(todo.isComplete())) {
                continue;
            }
            result.add(todo);
        }
        return result;
    }

    public void updateTodo(long id, TodoItem todo) throws TodoException {
        TodoItem todo2  = todos.get(id);
        todo2.setName(todo.getName());
        todo2.setComplete(todo.isComplete());
        todos.put(id, todo2);
    }

    public void deleteTodo(long id) {
        todos.remove(id);
    }

}
